/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

import be.Cliente;
import be.Cuota;
import be.DocumentoPresentado;
import be.EstadoDocumento;
import be.Producto;
import be.SolicitudCredito;
import be.SubTipoProducto;
import java.util.Date;
import java.util.ArrayList;
import javax.faces.model.SelectItem;

public class GestionarExpedienteController {
    private Cliente cliente;
    private SolicitudCredito sc;
    private ArrayList<SolicitudCredito> sols;
    private ArrayList<EstadoDocumento> estadosDoc;
    private ArrayList<DocumentoPresentado> docs;
    private ArrayList<SubTipoProducto> subs;
    private SubTipoProducto miSub;
    private Producto miPro;
    private String producto;
    private String subProducto;
    private ArrayList<Cuota> cuotas;

    private Boolean sr;
    private Boolean cr;
    private Boolean ag;
    private Boolean af;
    private Boolean gex;
    private Boolean na;

    private DocumentoPresentado docAdicional;

    private Date fechaSistema;
    private String horaSistema;
    private String estado;

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public String getHoraSistema() {
        return horaSistema;
    }

    public void setHoraSistema(String horaSistema) {
        this.horaSistema = horaSistema;
    }

    public ArrayList<Cuota> getCuotas() {
        return cuotas;
    }

    public void setCuotas(ArrayList<Cuota> cuotas) {
        this.cuotas = cuotas;
    }




    public Date getFechaSistema() {
        return fechaSistema;
    }

    public void setFechaSistema(Date fechaSistema) {
        this.fechaSistema = fechaSistema;
    }

    public Producto getMiPro() {
        return miPro;
    }

    public void setMiPro(Producto miPro) {
        this.miPro = miPro;
    }

    public SubTipoProducto getMiSub() {
        return miSub;
    }

    public void setMiSub(SubTipoProducto miSub) {
        this.miSub = miSub;
    }

    public String getProducto() {
        return producto;
    }

    public void setProducto(String producto) {
        this.producto = producto;
    }

    public String getSubProducto() {
        return subProducto;
    }

    public void setSubProducto(String subProducto) {
        this.subProducto = subProducto;
    }

    public ArrayList<SubTipoProducto> getSubs() {
        return subs;
    }

    public void setSubs(ArrayList<SubTipoProducto> subs) {
        this.subs = subs;
    }


    public Boolean getAf() {
        return af;
    }
    public void setAf(Boolean af) {
        this.af = af;
    }
    public Boolean getAg() {
        return ag;
    }
    public void setAg(Boolean ag) {
        this.ag = ag;
    }
    public Boolean getCr() {
        return cr;
    }
    public void setCr(Boolean cr) {
        this.cr = cr;
    }
    public Boolean getNa() {
        return na;
    }
    public void setNa(Boolean na) {
        this.na = na;
    }
    public Boolean getSr() {
        return sr;
    }
    public void setSr(Boolean sr) {
        this.sr = sr;
    }

    public ArrayList<EstadoDocumento> getEstadosDoc() {
        return estadosDoc;
    }
    public void setEstadosDoc(ArrayList<EstadoDocumento> estadosDoc) {
        this.estadosDoc = estadosDoc;
    }

    public Boolean getGex() {
        return gex;
    }
    public void setGex(Boolean gex) {
        this.gex = gex;
    }

    public DocumentoPresentado getDocAdicional() {
        return docAdicional;
    }
    public void setDocAdicional(DocumentoPresentado docAdicional) {
        this.docAdicional = docAdicional;
    }

    public ArrayList<DocumentoPresentado> getDocs() {
        return docs;
    }
    public void setDocs(ArrayList<DocumentoPresentado> docs) {
        this.docs = docs;
    }

    public Cliente getCliente() {
        return cliente;
    }
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public SolicitudCredito getSc() {
        return sc;
    }
    public void setSc(SolicitudCredito sc) {
        this.sc = sc;
    }

    public GestionarExpedienteController(){

        sols = new ArrayList<SolicitudCredito>();
        fechaSistema = new Date();
        horaSistema = fechaSistema.getHours()+ ":" + fechaSistema.getMinutes();
        cliente = new Cliente();
        sc = new SolicitudCredito();
        
        iniciarData();


    }

    public String getNombreCompleto(){
        if(cliente.getNombre()==null)
            return "";
        else
            return cliente.getNombre() + " " + cliente.getApePat() + " " + cliente.getApeMat();
    }

    public String buscarCliente(){
        cliente.setNombre("Juan");
        cliente.setApePat("Perez");
        cliente.setApeMat("Garcia");
        return "";
    }

    public String registrarNuevaSolicitud(){
        docs = new ArrayList<DocumentoPresentado>();
        for(int i = 0; i < 3; i++){
            DocumentoPresentado doc = new DocumentoPresentado();
            doc.setNombre("Documento Obligatorio " + ((Integer)(i+1)).toString());
            doc.setId(i+1);
            doc.setObligatorio(true);
            doc.setEstado(estadosDoc.get(0).getNombre());
            docs.add(doc);
        }
        sc.setMonto(1200.0);
        sc.setNroCuotas(12);
        miSub = subs.get(0);
        subProducto = miSub.getNombre();
        sc.setFechaRegistro(new Date());
        for(Producto pro: miSub.getProductos()){
            if(pro.getNombre().equals(producto))
                miPro = pro;
        }
        sc.setCliente(cliente);
        estado="En Tramite";
        sc.setNombreAnalista("Carla Solorzano");

        
        return "nuevaSolicitud";
    }

    public SelectItem[] getEstadosDocs(){
        SelectItem[] estados = new SelectItem[estadosDoc.size()];
        int i = 0;
        for (EstadoDocumento es : estadosDoc) {
            estados[i++] = new SelectItem(es.getNombre(), es.getNombre());
        }
        return estados;
    }

    public String verCuotas(){
        cuotas = new ArrayList<Cuota>();
        for(int i = 0; i < sc.getNroCuotas(); i++){
            Cuota cuo = new Cuota();
            cuo.setNro(i+1);
            Date fechaV = new Date();
            fechaV.setMonth(fechaV.getMonth() + i + 1);
            cuo.setFechaVencimiento(fechaV);
            Double montoCuota = sc.getMonto()/sc.getNroCuotas();
            montoCuota= montoCuota + ((montoCuota*miPro.getInteres())/100);
            cuo.setMonto(montoCuota);
            cuotas.add(cuo);
        }
        return "verCuotas";
    }
    public String verExpediente(){
        gex = true;
        return "verExpediente";
    }

    public String verProductos(){
        return "productos";
    }

    public String nuevaSC(){
        return "evaluarSolicitud";
    }

    public String verAutonomias(){
        return "autonomias";
    }

    public String analisisFactibilidad(){
        af = true;
        return "factibilidad";
    }

    public String asociarGarantia(){
        ag = true;
        return "asociarGarantia";
    }
        
    public String nivelAutonomia(){
        sols.add(sc);
        return "evaluarAutonomia";
    }

    public String aprobarAutonomia(){
        na = true;
        estado="Lista para Desembolso";
        return "volver";
    }
            
    public String scoringRating(){
        sr = true;
        sc.setScoring(3.5);
        return "scoring";
    }

    public String centralRiesgos(){
        sc.setCalificacion(4);
        cr = true;
        return "";
    }

    public String agregarDoc(){
        docAdicional = new DocumentoPresentado();
        return "docAdicional";
    }

    public String regDocAdicional(){
        docAdicional.setObligatorio(false);
        docs.add(docAdicional);
        return "volver";
    }

    public String realizarExtorno(){
        return "extornar";
    }

    public String actualizarExpediente(){
        for(DocumentoPresentado d: docs){
             if(!d.getEstado().equals(estadosDoc.get(0).getNombre()))
                 d.setFechaPresentacion(new Date());
        }
        return "volver";
    }

    private void iniciarData() {
        int i;
        int j;
        estadosDoc = new ArrayList<EstadoDocumento>();
        for(i = 0; i < 5; i++){
            EstadoDocumento es = new EstadoDocumento();
            es.setId(i+1);
            es.setSospechoso(false);
            estadosDoc.add(es);
        }
        subProducto=null;
        producto=null;
        estadosDoc.get(0).setNombre("Sin Presentar");
        estadosDoc.get(1).setNombre("Presentado");
        estadosDoc.get(2).setNombre("Falso");
        estadosDoc.get(2).setSospechoso(true);
        estadosDoc.get(3).setNombre("Ilegible");
        estadosDoc.get(4).setNombre("No Adjunto");

        subs = new ArrayList<SubTipoProducto>();
        SubTipoProducto s1 = new SubTipoProducto();
        s1.setNombre("Escolar");
        SubTipoProducto s2 = new SubTipoProducto();
        s2.setNombre("Comercial");
        SubTipoProducto s3 = new SubTipoProducto();
        s3.setNombre("Construccion");
        subs.add(s1);
        subs.add(s2);
        subs.add(s3);

        for(i = 0 ; i < subs.size(); i++){
            subs.get(i).setProductos(new ArrayList<Producto>());
            subs.get(i).setId(i+1);
            for(j = 0; j < 3; j++){
                Producto pro = new Producto();
                pro.setId(i*3 + j + 1);
                pro.setNombre(subs.get(i).getNombre() + " " + Integer.toString(j+1));
                pro.setInteres((double) (j + 3.5));
                pro.setSub(subs.get(i));
                subs.get(i).getProductos().add(pro);
            }
        }
    }

    public SelectItem[] getSubProductos(){
        SelectItem[] selects = new SelectItem[subs.size()];
        int i = 0;
        for (SubTipoProducto sub : subs){
            selects[i++] = new SelectItem(sub.getNombre(), sub.getNombre());
        }
        return selects;
    }

    public SelectItem[] getProductos(){

        int i;
        for(i = 0; i < subs.size(); i++){
            if(subs.get(i).getNombre().equals(subProducto))
                miSub = subs.get(i);
        }
        i = 0;
        SelectItem[] selects = new SelectItem[miSub.getProductos().size()];
        for (Producto pro : miSub.getProductos()){
            selects[i++] = new SelectItem(pro.getNombre(), pro.getNombre());
        }
        return selects;
    }

    public SubTipoProducto subProd(Integer index){
        return subs.get(index-1);
    }

    public Producto prod(Integer index){
        for(Producto p: miSub.getProductos()){
            if(p.getId()==index)
                return p;
        }
        return null;    
    }

    public ArrayList<SolicitudCredito> getSols() {
        return sols;
    }

    public void setSols(ArrayList<SolicitudCredito> sols) {
        this.sols = sols;
    }



}
